package cn.shengchao.examstar.product.acl.ports.repositories;

import cn.shengchao.examstar.product.infrastructure.dao.po.TProductCourseSetting;
import cn.shengchao.examstar.rpc.base.TransResult;
import cn.shengchao.examstar.rpc.orders.res.PayOrderInfoDto;
import cn.shengchao.examstar.rpc.product.base.ProductPropertyDto;
import cn.shengchao.examstar.rpc.product.base.ProductSettingDto;
import cn.shengchao.examstar.rpc.product.req.ProductCourseSettingBatchSaveDto;
import cn.shengchao.examstar.rpc.product.req.ProductCourseSettingDeleteDto;
import cn.shengchao.examstar.rpc.product.req.ProductCourseSettingDto;
import cn.shengchao.examstar.rpc.product.req.ProductCourseSettingPageQuery;
import cn.shengchao.examstar.rpc.product.res.ProductCourseSettingVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @program: examstarapi
 * @description: 产品合作配置
 * @author: Xiong weiqiang
 * @create: 2025-06-27 20:09
 */
public interface IProductCourseSettingRepository extends IService<TProductCourseSetting> {
    //赶考课程配置合作有效期，默认是按内部存过的配置来，如果有新的赶考课程需要先手动配置好数据，不然找不到匹配的赶考课程第三方课节id，不能交互。
    TransResult<String> saveProductCourseSettingForGkCourse(ProductCourseSettingBatchSaveDto productCourseSettingBatchSaveDto);
    //按照课程或章节id配置合作有效期，可以包含赶考的课程，不过注意赶考课程配置如果有新的赶考课程需要先手动配置好数据，不然找不到匹配的赶考课程第三方课节id，不能交互。
    TransResult<String> saveProductCourseSettingByCourse(ProductCourseSettingBatchSaveDto productCourseSettingBatchSaveDto);
    //按照单节视频配置合作有效期
    TransResult<String> saveProductCourseSetting(ProductCourseSettingDto productCourseSettingDto);

    ProductSettingDto getProductCourseSetting(Long productId);

    Map<Long,ProductPropertyDto> loadProductCourseSettingByOrderDto(PayOrderInfoDto payOrderInfoDto);

    List<ProductCourseSettingVo> pageList(ProductCourseSettingPageQuery query);


    TransResult<String> deleteProductCourseSetting(ProductCourseSettingDeleteDto productCourseSettingDeleteDto);

    List<ProductCourseSettingVo> queryForCourse(Long productId);

    List<ProductCourseSettingVo> queryForLesson(Long productId, List<Long> sectionIds);

    List<ProductCourseSettingVo> queryForSection(Long productId);
}